import request from '@/utils/http/uni-ajax';

/** 身份认证服务URL枚举 */
const Api = {
  /** 用户名是否存在 */
  CheckUserNameExists: '/api/identity/checkUserNameExists',
  /** 用户Email是否存在 */
  CheckEmailExists: '/api/identity/checkEmailExists',
  /** 用户手机号是否存在 */
  CheckPhoneNumberExists: '/api/identity/checkPhoneNumberExists',
  /** 用户昵称是否存在 */
  CheckNickNameExists: '/api/identity/checkNickNameExists',

  /** 新用户注册URL */
  Register: '/api/identity/register',
  /** 登录URL（目前不开放该接口） */
  Login: '/api/identity/login',
  /** 获取身份认证令牌URL */
  Token: '/api/identity/token',
  /** 使用手机号获取身份认证令牌 */
  PhoneToken: '/api/identity/phoneToken',
  /** 使用授权码获取身份认证令牌 */
  AuthorizationToken: '/api/identity/authorizationToken',

  /** 获取登录二维码令牌 */
  GetQrCodeToken: '/api/identity/getQrCodeToken',
  /** 扫描登录二维码令牌 */
  ScanQrCodeToken: '/api/identity/scanQrCodeToken',
  /** 确认登录二维码令牌 */
  ConfirmQrCodeToken: '/api/identity/confirmQrCodeToken',

  /** OAuth2登录 */
  OAuth2: '/api/identity/oauth2',
  /** OAuth2绑定 */
  OAuth2Bind: '/api/identity/oauth2bind',
  /** 第三方身份获取认证令牌 */
  OAuth2Token: '/api/identity/oauth2Token',
  /** 读取OAuth2登录信息 */
  ReadOAuth2: '/api/identity/readOAuth2',
  /** 登录并绑定账号URL */
  LoginBind: '/api/identity/loginBind',
  /** 使用第三方账号一键登录URL */
  LoginOneKey: '/api/identity/loginOneKey',
  /** OAuth2绑定提交 */
  OAuth2BindCommit: '/api/identity/oAuth2BindCommit',
  /** 解除第三方登录 */
  RemoveOAuth2: '/api/identity/removeOAuth2',

  /** 验证登录URL */
  Checklogin: '/api/identity/checkLogin',
  /** 用户登出URL */
  Logout: '/api/identity/logout',

  /** 获取在线用户信息 */
  Profile: '/api/identity/profile',
  /** 编辑用户资料 */
  ProfileEdit: '/api/identity/profileEdit',
  /** 修改密码 */
  ChangePassword: '/api/identity/changePassword',

  /** 获取组织机构节点 */
  GetOrganizationNode: '/api/identity/getOrganizationNode',
  /** 获取组织机构树 */
  GetOrganizationTree: '/api/identity/getOrganizationTree',
  /** 设置当前组织机构 */
  SetOrganization: '/api/identity/setOrganization',

  /** 发送激活注册邮件 */
  SendConfirmEmail: '/api/identity/sendConfirmEmail',
  /** 激活邮箱 */
  ConfirmEmail: '/api/identity/confirmEmail',
  /** 发送重置密码邮件 */
  SendResetPwdEmail: '/api/identity/sendResetPwdEmail',
  /** 根据电子邮箱重置登录密码 */
  ResetPwdByEmail: '/api/identity/resetPwdByEmail',
  /** 用户邮箱变更 */
  ChangeUserEmail: '/api/identity/changeUserEmail',

  /** 激活手机 */
  ConfirmPhone: '/api/identity/confirmPhone',
  /** 根据手机重置登录密码 */
  ResetPwdByPhone: '/api/identity/resetPwdByPhone',
  /** 用户手机变更 */
  ChangeUserPhone: '/api/identity/changeUserPhone',
}

//#region 用户名是否存在
/**
 * 用户名是否存在
 * @param userName 用户名
 * @param ignoreSelf 是否忽略自己
 * @param mode 错误消息模型
 */
export function checkUserNameExists(
  userName,
  ignoreSelf = true,
  mode = 'none',
) {
  if (!userName || userName === null || userName === '') {
    return Promise.resolve(false);
  }
  return request.get({
    url: Api.CheckUserNameExists,
    query: {
      userName: userName,
      ignoreSelf: ignoreSelf
    },
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 用户Email是否存在
/**
 * 用户Email是否存在
 * @param email 电子邮箱
 * @param ignoreSelf 是否忽略自己
 * @param mode 错误消息模型
 */
export function checkEmailExists(
  email,
  ignoreSelf = true,
  mode = 'none',
) {
  if (!email || email === null || email === '') {
    return Promise.resolve(false);
  }
  return request.get({
    url: Api.CheckEmailExists,
    query: {
      email: email,
      ignoreSelf: ignoreSelf
    },
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 用户手机号是否存在
/**
 * 用户手机号是否存在
 * @param phoneNumber 手机号
 * @param ignoreSelf 是否忽略自己
 * @param mode 错误消息模型
 */
export function checkPhoneNumberExists(
  phoneNumber,
  ignoreSelf = true,
  mode = 'none',
) {
  if (!phoneNumber || phoneNumber === null || phoneNumber === '') {
    return Promise.resolve(false);
  }
  return request.get({
    url: Api.CheckPhoneNumberExists,
    query: {
      phoneNumber: phoneNumber,
      ignoreSelf: ignoreSelf
    },
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 用户昵称是否存在
/**
 * 用户昵称是否存在
 * @param nickName 用户昵称
 * @param ignoreSelf 是否忽略自己
 * @param mode 错误消息模型
 */
export function checkNickNameExists(
  nickName,
  ignoreSelf = true,
  mode = 'none',
) {
  if (!nickName || nickName === null || nickName === '') {
    return Promise.resolve(false);
  }
  return request.get({
    url: Api.CheckNickNameExists,
    params: {
      nickName: nickName,
      ignoreSelf: ignoreSelf
    },
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 新用户注册
/**
 * 新用户注册
 * @param dto 用户注册信息DTO
 * @param mode 错误消息模型
 */
export function register(dto, mode = 'modal') {
  return request.post({
    url: Api.Register,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 获取身份认证令牌
/**
 * 获取身份认证令牌
 * @param dto 身份认证令牌请求DTO
 * @param mode 错误消息模型
 */
export function token(dto, mode = 'modal') {
  return request.post({
    url: Api.Token,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 使用手机号获取身份认证令牌
/**
 * 使用手机号获取身份认证令牌
 * @param dto 手机号令牌请求DTO
 * @param mode 错误消息模型
 */
export function phoneToken(dto, mode = 'modal') {
  return request.post({
    url: Api.PhoneToken,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 使用授权码获取身份认证令牌
/**
 * 使用授权码获取身份认证令牌
 * @param dto 授权码身份认证令牌请求DTO
 * @param mode 错误消息模型
 */
export function authorizationToken(dto, mode = 'modal') {
  return request.post({
    url: Api.AuthorizationToken,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 获取登录二维码令牌
/**
 * 获取登录二维码令牌
 * @param dto 二维码令牌DTO
 * @param mode 错误消息模型
 */
export function getQrCodeToken(dto, mode = 'message') {
  return request.post({
    url: Api.GetQrCodeToken,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 扫描登录二维码令牌
/**
 * 扫描登录二维码令牌
 * @param dto 二维码令牌DTO
 * @param mode 错误消息模型
 */
export function scanQrCodeToken(dto, mode = 'message') {
  return request.post({
    url: Api.ScanQrCodeToken,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 确认登录二维码令牌
/**
 * 确认登录二维码令牌
 * @param dto 二维码令牌DTO
 * @param mode 错误消息模型
 */
export function confirmQrCodeToken(dto, mode = 'message') {
  return request.post({
    url: Api.ConfirmQrCodeToken,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 第三方身份获取认证令牌
/**
 * 第三方身份获取认证令牌
 * @param dto 第三方身份获取TokenDTO
 * @param mode 错误消息模型
 */
export function oAuth2Token(dto, mode = 'modal') {
  return request.post({
    url: Api.OAuth2Token,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 读取OAuth2登录信息
/**
 * 读取OAuth2登录信息
 * @param request 分布式查询请求
 * @param mode 错误消息模型
 */
export function readOAuth2(request, mode = 'message') {
  return request.post({
    url: Api.ReadOAuth2,
    data: request,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 登录并绑定账号
/**
 * 登录并绑定账号
 * @param dto 第三方用户登录信息
 * @param mode 错误消息模型
 */
export function loginBind(dto, mode = 'modal') {
  return request.post({
    url: Api.LoginBind,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region OAuth2绑定提交
/**
 * OAuth2绑定提交
 * @param dto 第三方用户登录信息
 * @param mode 错误消息模型
 */
export function oAuth2BindCommit(dto, mode = 'message') {
  return request.post({
    url: Api.OAuth2BindCommit,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 使用第三方账号一键登录
/**
 * 使用第三方账号一键登录
 * @param dto 第三方用户登录信息
 * @param mode 错误消息模型
 */
export function loginOneKey(dto, mode = 'modal') {
  return request.post({
    url: Api.LoginOneKey,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 解除第三方登录
/**
 * 解除第三方登录
 * @param dto 第三方用户登录主键
 * @param mode 错误消息模型
 */
export function removeOAuth2(dto, mode = 'message') {
  return request.post({
    url: Api.RemoveOAuth2,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 验证登录
/**
 * 验证登录
 * @param dto 登录信息DTO
 * @param mode 错误消息模型
 */
export async function checkLogin(dto, mode = 'none') {
  const result = await request.post({
    url: Api.Checklogin,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
  return result;
}
//#endregion
//#region 用户登出
/**
 * 用户登出
 * @param mode 错误消息模型
 */
export function logout(mode = 'message') {
  return request.post({
    url: Api.Logout,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 获取在线用户信息
/**
 * 获取在线用户信息
 * @param mode 错误消息模型
 */
export function profile(mode = 'none') {
  return request.get({
    url: Api.Profile,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 编辑用户资料
/**
 * 编辑用户资料
 * @param dto 用户资料编辑DTO
 * @param mode 错误消息模型
 */
export function profileEdit(dto, mode = 'modal') {
  return request.post({
    url: Api.ProfileEdit,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 修改密码
/**
 * 修改密码
 * @param dto 修改密码信息
 * @param mode 错误消息模型
 */
export function changePassword(dto, mode = 'message') {
  return request.post({
    url: Api.ChangePassword,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 获取组织机构节点
/**
 * 获取组织机构节点
 * @param mode 错误消息模型
 */
export function getOrganizationNode(mode = 'none') {
  return request.get({
    url: Api.GetOrganizationNode,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 获取组织机构树
/**
 * 获取组织机构树
 * @param mode 错误消息模型
 */
export function getOrganizationTree(mode = 'none') {
  return request.get({
    url: Api.GetOrganizationTree,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 设置当前组织机构
/**
 * 设置当前组织机构
 * @param organizationId 组织机构编号
 * @param mode 错误消息模型
 */
export function setOrganization(organizationId, mode = 'modal') {
  return request.post({
    // url: `${Api.SetOrganization}?organizationId=${organizationId}`,
    url: Api.SetOrganization,
    query: {
      organizationId: organizationId,
    },
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion

//#region 激活手机
/**
 * 激活手机
 * @param dto 确认手机DTO
 * @param mode 错误消息模型
 */
export function confirmPhone(dto, mode = 'modal') {
  return request.post({
    url: Api.ConfirmPhone,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 根据手机重置登录密码
/**
 * 根据手机重置登录密码
 * @param dto 重置密码信息
 * @param mode 错误消息模型
 */
export function resetPwdByPhone(dto, mode = 'modal') {
  return request.post({
    url: Api.ResetPwdByPhone,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion
//#region 用户手机变更
/**
 * 用户手机变更
 * @param dto 用户手机变更DTO
 * @param mode 错误消息模型
 */
export function changeUserPhone(dto, mode = 'message') {
  return request.post({
    url: Api.ChangeUserPhone,
    data: dto,
    requestOptions: {
      errorMessageMode: mode
    }
  });
}
//#endregion